Storytelling visual con R

Curso formativo para el PDI. Universidad de Castilla-La Mancha

Gema Fernández-Avilés
Isidro Hidalgo

Unidad 2 La importancia del contexto La importancia del contexto

Agenda

  1. Objetivos de aprendizaje

  2. Resultados esperados

  3. Conceptos clave

  4. ¿Qué hemos aprendido?

1. Objetivos de aprendizaje 🎯

  • Subrayar la importancia del contexto.

  • Conectar los datos con la historia.

  • Mostrar cómo el contexto influye en la visualización.

  • Evitar manipulaciones no intencionadas.

2. Resultados esperados 🏅

3. Conceptos clave 📝

Análisis exploratorio frente a análisis explicativo

Tipos de análisis. Fuente: Knaflic (2019)**

  • El análisis exploratorio: es lo que se hace para comprender los datos y averiguar qué puede ser digno de mención o interesante para otros. El análisis exploratorio es como buscar perlas en las ostras.

  • El análisis explicativo: es lo que se hace para explicar los datos a otros. El análisis explicativo es como hacer joyas con las perlas.

Cuestiones clave

¿Dónde empezamos?. Fuente: Knaflic (2019)

¿Cómo nos comunicamos con el público?

Communication mechanism continuum. Fuente: Knaflic (2019)

¿Cómo organizamos el contexto?

  • Historia en 3‐minutos:: Si sólo dispusieras de tres minutos para decirle a su público lo que necesita saber, ¿qué le dirías?

  • La gran idea: la Gran Idea reduce el “qué” aún más: a una sola frase.

  • Storyboard o representación visual de la historias: una serie de imágenes que representan las escenas clave de la historia.

El contexto en R: tidyverse

  • Conocer qué es el tidyverse y los datos tidy

  • Descubrir las acciones (verbos) de {dplyr}.

  • Aprender a visualizar datos con {ggplot2}.

Tidy data 📃

¿Qué significa tidy? ¿Cuál de estas dos imágenes es más tidy?

Imagen tomada de: iStock

¡Acertaste!

Imagen adaptada de: iStock

Características de los datos tidy

  • Cada variable forma una columna.

  • Cada observación forma una fila.

  • Cada tipo de unidad de observación forma una tabla.

Fuente: Wickham and Grolemund (2016)

The grammar of data wrangling: {tidyverse} 🚧

Fuente: Allison Horst

Fuente: https://r4ds.had.co.nz/

Tidyverse:

Es una colección de paquetes coehrentes, que comparten gramática, filosofía y estructura y están diseñados para realizar juntos como una canalización completa (pipeline). Todos se basan en la idea de tidy data propuesta por Hadley Wickham Hadley (2014) y pueden instalarse con un único comando en R:

install.packages("tidyverse")

Los paquetes que forman parte del tidyverse son:

  • {readr}, para importación de datos.

  • {dplyr}, para manipulación de datos.

  • {tidyr}, para ordenar datos.

  • {ggplot2}, para visualización de datos.

  • {purrr}, para programación.

  • {tibble}, para tibbles, un nuevo formato de data frames.

  • {stringr}, para caracteres.

  • {forcats}, para factores.

El operador pipe 📄

¿Qué es un pipe?

En programación, un pipe (tubo) es una técnica que permite pasar información de un proceso a otro.

Fuente: https://static-bcrf.biochem.wisc.edu/courses/Tabular-data-analysis-with-R-and-Tidyverse/book/8-tidyverseanotherRuniverse.html

¿Cómo funciona el pipe de forma intuitiva?

Imagina la siguiente secuencia:

(i) find keys, (ii) unlock car, (iii) start car, (iv) drive to work y (v) park.

Expresado como un cojunto de funciones anidadas y pseudo-código R podría ser así:

park(drive(start_car(unlock(find("keys"))), to = "work"))

Utilizando pipes la lectura se hace más fácil y natural:

find("keys") |>
  unlock_car() |>
  start_car() |>
  drive(to = "work") |>
  park()

Transformación de datos con dplyr

Fuente: https://dplyr.tidyverse.org/
filas:
  filter() filtra casos en función de sus valores.
  arrange() cambia el orden de las filas.

columnas:
  select() elige variables en función de sus nombres.

transformación:
  summarise() reduce múltiples valores a un solo resumen.
  mutate() agrega nuevas variables que son funciones de variables existentes.

agrupación:
  group_by() agrupa datos por una o más variables.

Importante: Cheatsheets en R

Cheatsheets

Fuente: https://posit.co/resources/cheatsheets/

Manos a la obra

Note

Nosotros vamos a contar historias con los datos usando el software estadístico R por lo que es necesario conocer algunos paquetes y funciones para poder manipular y represenar los datos.

¿Qué hay en un conjunto de datos?

Mapa del universo observable con los objetos astronómicos notables conocidos en la actualidad. Fuente: Wikipedia.

El conjunto de datos starwars

Fuente: https://datasciencebox.org

Terminología (común)

  • Cada fila es una observación
  • Cada columna es una variable
library("dplyr")
starwars
# A tibble: 87 × 14
  name      height  mass hair_color skin_color eye_color birth_year sex   gender
  <chr>      <int> <dbl> <chr>      <chr>      <chr>          <dbl> <chr> <chr> 
1 Luke Sky…    172    77 blond      fair       blue            19   male  mascu…
2 C-3PO        167    75 <NA>       gold       yellow         112   none  mascu…
3 R2-D2         96    32 <NA>       white, bl… red             33   none  mascu…
4 Darth Va…    202   136 none       white      yellow          41.9 male  mascu…
5 Leia Org…    150    49 brown      light      brown           19   fema… femin…
6 Owen Lars    178   120 brown, gr… light      blue            52   male  mascu…
# ℹ 81 more rows
# ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
#   vehicles <list>, starships <list>

Tablas de datos (data.frames)

  • Cada columna: variable (cuantitativa o cualitativa).

  • Cada fila: elemento observado las características que representan las variables.

  • La forma más común: data.frame.

  • Para extraer una variable del data.frame se utiliza el operador $: nombre_dataframe$nombre_variable.

  • Cada columna del data.frame es un vector (otra estructura de datos).

Algunas cuestiones básicas

¿Cuántas columnas (variables) tiene?

ncol(starwars)
[1] 14

¿Cuántas filas (observaciones) tiene?

nrow(starwars)
[1] 87

¿Cuál es la dimensión del dataset?

dim(starwars)
[1] 87 14

Tablas de datos (data.frames)

# la función head() muestra los primeros valores
head(starwars, 3)
# A tibble: 3 × 14
  name      height  mass hair_color skin_color eye_color birth_year sex   gender
  <chr>      <int> <dbl> <chr>      <chr>      <chr>          <dbl> <chr> <chr> 
1 Luke Sky…    172    77 blond      fair       blue              19 male  mascu…
2 C-3PO        167    75 <NA>       gold       yellow           112 none  mascu…
3 R2-D2         96    32 <NA>       white, bl… red               33 none  mascu…
# ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
#   vehicles <list>, starships <list>
sw_name<-starwars$name

Note

El operador <- asigna al “símbolo” que hay a su izquierda el resultado de la expresión que hay a su derecha. El operador = funciona igual que <-.

Una observación (el bueno): Luke Skywalker

Fuente: https://datasciencebox.org

Exploración del dataset starwars

De un vistazo (con la función glimpse()):

skimr::skim(starwars)
Data summary
Name starwars
Number of rows 87
Number of columns 14
_______________________
Column type frequency:
character 8
list 3
numeric 3
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
name 0 1.00 3 21 0 87 0
hair_color 5 0.94 4 13 0 11 0
skin_color 0 1.00 3 19 0 31 0
eye_color 0 1.00 3 13 0 15 0
sex 4 0.95 4 14 0 4 0
gender 4 0.95 8 9 0 2 0
homeworld 10 0.89 4 14 0 48 0
species 4 0.95 3 14 0 37 0

Variable type: list

skim_variable n_missing complete_rate n_unique min_length max_length
films 0 1 24 1 7
vehicles 0 1 11 0 2
starships 0 1 16 0 5

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
height 6 0.93 174.60 34.77 66 167.0 180 191.0 264 ▂▁▇▅▁
mass 28 0.68 97.31 169.46 15 55.6 79 84.5 1358 ▇▁▁▁▁
birth_year 44 0.49 87.57 154.69 8 35.0 52 72.0 896 ▇▁▁▁▁

¿Qué conozco sobre Luke Skywalker (el bueno)?

# tidy
starwars|>
  filter(name=="Luke Skywalker")
# A tibble: 1 × 14
  name      height  mass hair_color skin_color eye_color birth_year sex   gender
  <chr>      <int> <dbl> <chr>      <chr>      <chr>          <dbl> <chr> <chr> 
1 Luke Sky…    172    77 blond      fair       blue              19 male  mascu…
# ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
#   vehicles <list>, starships <list>

4. ¿Qué hemos aprendido? 📖

  • La importancia del contexto en la comunicación.

  • Nociones básicas para manipular datos en R.

  • Homework: cumplimentar la hoja de trabajo.

Nuestra filosofía 📖: learning by doing

  • Recuerda que los ordenadores actualmente no son inteligentes.

  • Filosofía: copy, paste, and tweak.

  • La mejor forma de aprender código es haciéndolo.

  • La práctica es la clave.

Referencias

Hadley, Wickham. 2014. “Tidy Data.” Journal of Statistical Software 59 (10): 1–23.
Knaflic, Cole Nussbaumer. 2019. Storytelling with Data: Let’s Practice! John Wiley & Sons.
Wickham, Hadley, and Garrett Grolemund. 2016. R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. " O’Reilly Media, Inc.".